package com.demo.qqClient.service;

import com.demo.qqcommon.Message;
import com.demo.qqcommon.MessageType;

import java.io.*;

/**
 * @author gy
 * @date 2022/5/8
 */
public class FileClientService {

    /**
     * 发送文件给某个人
     *
     * @param src      发送发文件源目录
     * @param target   接收方目标路径
     * @param senderId 发送者id
     * @param getterId 接收方id
     */
    public void sendFileToOne(String src, String target, String senderId, String getterId) {

        // 封装msg 对象
        Message msg = new Message();
        msg.setMsgType(MessageType.MESSAGE_FILE_MES);
        msg.setSender(senderId);
        msg.setGetter(getterId);
        msg.setSrc(src);
        msg.setTarget(target);

        // 需要将文件进行读取
        FileInputStream fileInputStream = null;
        File file = new File(src);
        // 此时只是创建了 字节数组(大小为文件内容的大小)，此时里面并没有内容
        byte[] fileBytes = new byte[(int) file.length()];

        try {
            // 创建了 文件的输入流
            fileInputStream = new FileInputStream(src);
            // 将程序的文件 读入 到字节数组 中去，    此时字节数组中充满了数据
            int read = fileInputStream.read(fileBytes);
            // 将文件的 字节数组 设置到msg对象
            msg.setFileBytes(fileBytes);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (fileInputStream != null) {
                try {
                    fileInputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

        // 提示信息：
        System.out.println("\n" + senderId + " 给 " + getterId + "发送文件:" + src
                + " 到对方的电脑目录 " + target);

        // 发送消息
        try {
            ObjectOutputStream oos = new ObjectOutputStream(ManageClientConnectServerThread.getClientConnectServerThread(senderId)
                    .getSocket().getOutputStream());
            oos.writeObject(msg);
        } catch (IOException e) {
            e.printStackTrace();
        }

    }


}
